package com.ldxiwxr.controller.controller;

import com.ldxiwxr.common.common.*;
import com.ldxiwxr.common.utils.MedicineApiUtils;
import com.ldxiwxr.common.utils.MedicineIdentifyUtils;
import com.ldxiwxr.common.utils.SolarUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.PriorityQueue;

/**
 * 中药网站控制层
 * @author SuBanxia
 */
@RestController
@RequestMapping("/medicine")
@Api(tags = "MedicineController")
public class MedicineController {

    @ApiOperation("获取要闻列表")
    @GetMapping("/highlightList")
    public Result<?> highlightList(String pageSize){
        //调用工具类方法获取要闻列表
        List<MedicineHighLight> medicineHighlight = MedicineApiUtils.getMedicineHighlight(pageSize);
        //判断要闻为空时，返回查询失败
        if (medicineHighlight == null){
            return Result.fail("未获取到内容");
        }
        //返回结果
        return Result.data(medicineHighlight);
    }

    @ApiOperation("获取文章内容")
    @GetMapping("/articleContent")
    public Result<?> articleContent(String articleId){
        //调用工具类方法获取文章内容
        MedicineHighLight articleContent = MedicineApiUtils.getArticleContent(articleId);
        //判断要闻为空时，返回查询失败
        if (articleContent == null){
            return Result.fail("未获取到内容");
        }
        //返回结果
        return Result.data(articleContent);
    }

    @ApiOperation("获取中医文化列表")
    @GetMapping("/cultureList")
    public Result<?> cultureList(String pageSize){
        //调用工具类方法获取文化列表
        List<MedicineHighLight> cultureList = MedicineApiUtils.getCulture(pageSize);
        //判断文化为空时，返回查询失败
        if (cultureList == null){
            return Result.fail("未获取到内容");
        }
        //返回结果
        return Result.data(cultureList);
    }

    @ApiOperation("获取草药列表")
    @GetMapping("/medicineList")
    public Result<?> medicineList(String word){
        //调用工具类方法获取草药列表
        List<Medicine> medicineList = MedicineApiUtils.getMedicineList(word);

        //判断草药为空时，返回查询失败
        if (medicineList == null){
            return Result.fail("未获取到内容");
        }
        //返回结果
        return Result.data(medicineList);
    }

    @ApiOperation("上传图片判断草药名称")
    @PostMapping("/identifyMedicine")
    public Result<?> identifyMedicine(MultipartFile file) throws IOException {
        //调用草药识别工具类方法，获取草药名称
        MedicineIdentify medicineIdentify = MedicineIdentifyUtils.getMedicineIdentify(file);
        //判断是否查到内容
        if (medicineIdentify == null){
            return Result.fail("未查询到内容");
        }
        //返回结果
        return Result.data(medicineIdentify);
    }

    @ApiOperation("获取人物专访内容")
    @GetMapping("/getDoctor")
    public Result<?> getDoctor(){
        //调用工具类方法获取人物专访内容
        MedicineHighLight doctor = MedicineApiUtils.getDoctor();
        //判断文化为空时，返回查询失败
        if (doctor == null){
            return Result.fail("未获取到内容");
        }
        //返回结果
        return Result.data(doctor);
    }

    @ApiOperation("获取节气内容")
    @GetMapping("/getSolar")
    public Result<?> getSolar(){
        //调用工具类方法获取节气内容
        Solar solar = SolarUtils.getSolar();
        //判断，节气内容为空，查询失败
        if (solar == null){
            return Result.fail("未获取到内容");
        }
        //返回结果
        return Result.data(solar);
    }
}
